﻿using System.Text.RegularExpressions;

namespace Kyoh.Lib.Text
{
    /// <summary>正規表現の <see cref="IPattern"/> インタフェース実装です。</summary>
    public class RegexPattern : Regex, IPattern
    {
        /// <summary>指定した正規表現の <see cref="RegexPattern"/> クラスの新しいインスタンスを初期化およびコンパイルします。</summary>
        public RegexPattern(string pattern)
            : base(pattern)
        {
            Pattern = pattern;
        }

        /// <summary>指定した正規表現の <see cref="RegexPattern"/> クラスの新しいインスタンスを初期化およびコンパイルします。</summary>
        public RegexPattern(string pattern, RegexOptions options)
            : base(pattern, options)
        {
            Pattern = pattern;
        }

        /// <summary>指定した正規表現の <see cref="RegexPattern"/> クラスの新しいインスタンスを初期化およびコンパイルします。</summary>
        public RegexPattern(string pattern, string replacement)
            : base(pattern)
        {
            Pattern = pattern;
            Replacement = replacement;
        }

        /// <summary>指定した正規表現の <see cref="RegexPattern"/> クラスの新しいインスタンスを初期化およびコンパイルします。</summary>
        public RegexPattern(string pattern, string replacement, RegexOptions options)
            : base(pattern, options)
        {
            Pattern = pattern;
            Replacement = replacement;
        }

        /// <summary>指定した入力文字列内でマッチ文字集合に一致するすべての文字列を置換します。</summary>
        public string Replace(string input)
        {
            return base.Replace(input, Replacement);
        }

        /// <summary>指定した入力文字列内でマッチ文字集合に一致するすべての文字列を置換します。</summary>
        public string Replace(string input, int startat)
        {
            return base.Replace(input, Replacement, startat);
        }

        /// <summary>マッチングパタン文字列を取得します。</summary>
        public string Pattern { get; private set; }

        /// <summary>置換文字列を取得します。</summary>
        public string Replacement { get; private set; }
    }
}
